home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 7: Sunsite / Linux Cubed Series 7 - Sunsite Vol 1.iso / system / shells / kiss-0.11 / kiss-0 / kiss / src / removefile.c < prev    next >
C/C++ Source or Header  |  1995-03-23  |  1KB  |  53 lines

  1. #include "kiss.h"
  2.  
  3. int removefile (char *name, RmFlags fl)
  4. {
  5.     struct stat
  6.     statbuf;
  7.     register int
  8.     namelen;
  9.  
  10.     if (stat (name, &statbuf) && lstat (name, &statbuf))
  11.     return (warning ("cannot stat \"%s\"", name));
  12.  
  13.     namelen = strlen (name);
  14.     if (! strcmp (name, ".") ||
  15.     ! strcmp (name, "..") ||
  16.     (namelen >= 2 && ! strcmp (name + namelen - 2, "/.")) ||
  17.     (namelen >= 3 && ! strcmp (name + namelen - 3, "/.."))
  18.        )
  19.     return (warning ("won't remove \".\" or \"..\" directories"));
  20.         
  21.     if (fl.interactive)
  22.     {
  23.     printf ("%s: remove \"%s\" [y/?] ", progname, name);
  24.     if (getinput (stdin) != 'y')
  25.         return (0);
  26.     }
  27.     else if (fl.verbose)
  28.     printf ("%s\n", name);
  29.  
  30.     if (S_ISDIR (statbuf.st_mode))
  31.     {
  32.     if (fl.recursive)
  33.         return (recursiveremove (name, fl));
  34.     else
  35.         return (warning ("\%s\" is a directory", name));
  36.     }
  37.  
  38.     if (! (statbuf.st_mode & S_IWUSR))
  39.     {
  40.     if (! fl.forced)
  41.         return (warning ("\"%s\" is non-writable", name));
  42.     if (chmod (name, statbuf.st_mode | S_IWUSR))
  43.         return (warning ("failure removing read-only mode on \"%s\"",
  44.                  name));
  45.     }
  46.  
  47.     if (unlink (name))
  48.     return (warning ("failure removing \"%s\"", name));
  49.  
  50.     return (0);
  51. }
  52.     
  53.